package utils

import (
	"encoding/json"
	"io/ioutil"
	"zinx-learn/ziface"
)

type GlobalObj struct {
	TcpServer      ziface.IServer //当前Zinx的全局Server对象
	Host           string         //当前服务器主机IP
	TcpPort        int            //当前服务器主机监听端口号
	Name           string         //当前服务器名称
	Version        string         //当前Zinx版本号
	MaxPacketSize  uint32         //都需数据包的最大值
	MaxConn        int            //当前服务器主机允许的最大链接个数
	WorkPoolSize   uint32         // work pool 大小
	MaxWorkTaskLen uint32         // 业务工作Worker对应负责的任务队列最大任务存储数量
	MaxMsgChanLen  uint32         // 最大缓冲数量
	ConfigPath     string         // 配置文件的路径
}

// GlobalObject 全局配置对象
var GlobalObject *GlobalObj

// 读取用户配置文件
func (o *GlobalObj) Reload() {
	data, err := ioutil.ReadFile(o.ConfigPath)
	if err != nil {
		panic(err)
	}
	// 将数据解析到 GlobalObj 中
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

// 导包的时候进行初始化操作
func init() {
	// 用户没有配置的时候的默认操作
	GlobalObject = &GlobalObj{
		Host:           "127.0.0.1",
		TcpPort:        8999,
		Name:           "ZinxServer",
		Version:        "tcp4",
		MaxPacketSize:  512,
		MaxConn:        10000,
		WorkPoolSize:   10,
		MaxWorkTaskLen: 1000,
		MaxMsgChanLen:  10,
		ConfigPath:     "conf/zinx.json",
	}
	GlobalObject.Reload()
}
